#!/usr/bin/env node

/**
 * 多入口 vs 单入口测试脚本
 * 展示两种配置方式的差异
 */

const fs = require('fs');
const path = require('path');

console.log('🧪 多入口 vs 单入口配置测试\n');

// 测试用例
const testCases = [
  {
    name: '多入口配置（当前）',
    description: '支持子路径导入，更好的 Tree-shaking',
    config: {
      entry: {
        index: 'src/index.ts',
        button: 'src/button.tsx',
        card: 'src/card.tsx',
        code: 'src/code.tsx'
      }
    },
    usage: [
      'import { Button, Card, Code } from "@repo/ui"',
      'import { Button } from "@repo/ui/button"',
      'import { Card } from "@repo/ui/card"',
      'import { Code } from "@repo/ui/code"'
    ],
    pros: [
      '✅ 支持按需导入',
      '✅ 更好的 Tree-shaking',
      '✅ 支持动态导入',
      '✅ 兼容更多构建工具'
    ],
    cons: [
      '❌ 配置稍复杂',
      '❌ 构建时间稍长',
      '❌ 输出文件较多'
    ]
  },
  {
    name: '单入口配置（简化）',
    description: '只支持主入口导入，配置简单',
    config: {
      entry: 'src/index.ts'
    },
    usage: [
      'import { Button, Card, Code } from "@repo/ui"'
    ],
    pros: [
      '✅ 配置简单',
      '✅ 构建快速',
      '✅ 输出文件少',
      '✅ 开发体验好'
    ],
    cons: [
      '❌ 不支持按需导入',
      '❌ Tree-shaking 效果有限',
      '❌ 打包体积可能较大'
    ]
  }
];

// 显示测试用例
testCases.forEach((testCase, index) => {
  console.log(`${'='.repeat(60)}`);
  console.log(`📋 ${index + 1}. ${testCase.name}`);
  console.log(`${'='.repeat(60)}`);
  console.log(`📝 描述: ${testCase.description}\n`);
  
  console.log('⚙️ 配置:');
  console.log(JSON.stringify(testCase.config, null, 2));
  
  console.log('\n📦 使用方式:');
  testCase.usage.forEach(usage => {
    console.log(`  ${usage}`);
  });
  
  console.log('\n✅ 优点:');
  testCase.pros.forEach(pro => {
    console.log(`  ${pro}`);
  });
  
  console.log('\n❌ 缺点:');
  testCase.cons.forEach(con => {
    console.log(`  ${con}`);
  });
  
  console.log('');
});

// 实际文件大小对比
console.log(`${'='.repeat(60)}`);
console.log('📊 实际文件大小对比');
console.log(`${'='.repeat(60)}`);

const distPath = path.join(__dirname, '../packages/ui/dist');
if (fs.existsSync(distPath)) {
  const files = fs.readdirSync(distPath);
  const jsFiles = files.filter(file => file.endsWith('.js'));
  
  console.log('\n📁 当前构建输出:');
  jsFiles.forEach(file => {
    const filePath = path.join(distPath, file);
    const stats = fs.statSync(filePath);
    const sizeKB = (stats.size / 1024).toFixed(2);
    console.log(`  ${file}: ${sizeKB} KB`);
  });
  
  // 计算总大小
  const totalSize = jsFiles.reduce((total, file) => {
    const filePath = path.join(distPath, file);
    return total + fs.statSync(filePath).size;
  }, 0);
  
  console.log(`\n📈 总大小: ${(totalSize / 1024).toFixed(2)} KB`);
}

// 推荐配置
console.log(`\n${'='.repeat(60)}`);
console.log('🎯 推荐配置');
console.log(`${'='.repeat(60)}`);

console.log('\n根据你的项目需求选择:');
console.log('\n🏢 企业级组件库:');
console.log('  - 使用多入口配置');
console.log('  - 支持按需导入');
console.log('  - 优化生产环境性能');

console.log('\n🚀 内部工具库:');
console.log('  - 使用单入口配置');
console.log('  - 简化开发流程');
console.log('  - 提升开发效率');

console.log('\n💡 当前建议:');
console.log('  由于你的项目是 monorepo 中的内部 UI 包，');
console.log('  建议保持当前的多入口配置，因为:');
console.log('  1. 支持更好的 Tree-shaking');
console.log('  2. 为未来扩展做准备');
console.log('  3. 配置复杂度可以接受');

console.log('\n🔧 如果想简化配置:');
console.log('  可以修改 tsup.config.ts 为:');
console.log('  entry: "src/index.ts"');
console.log('  并移除 package.json 中的子路径导出');

console.log('\n🎯 测试完成！'); 